package com.quanyan.user.service;

import com.quanyan.api.APIResponse;
import com.quanyan.common.utils.StringUtil;
import com.quanyan.redisCluster.utils.RedisKey;
import com.quanyan.user.constants.UserConstants;
import com.quanyan.user.model.db.TbUser;
import com.quanyan.user.model.db.TbUserExample;
import com.quanyan.user.response.RespUserInfoBase;
import com.quanyan.user.response.RespUserInfoDetail;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2016/9/18.
 */
public interface UserQueryService {

    /**
     * 查询用户基本信息
     * @param uid
     * @return
     */
    APIResponse<RespUserInfoBase> queryUserInfo(Integer uid);

    /**
     * 查询用户详细信息
     * @param uid
     * @return
     */
    APIResponse<RespUserInfoDetail> queryUserInfoDetail(Integer uid);


    /**
     * 通过手机号查询用户基本信息
     * @param phone
     * @return
     */
    APIResponse<RespUserInfoBase> queryUserInfo(String phone);

    /**
     * 通过微信查询用户基本信息
     * @param wxOpenId
     * @return
     */
    APIResponse<RespUserInfoBase> queryUserInfoByWxOpenId(String wxOpenId);


    /**
     * 批量查询用户基本信息
     * @param lstUserId
     * @return
     */
    APIResponse<List<RespUserInfoBase>> batchQueryUserInfo(List<Integer> lstUserId);

    /**
     * 批量查询用户详细信息
     * @param lstUserId
     * @return
     */
    APIResponse<List<RespUserInfoDetail>> batchQueryUserInfoDetail(List<Integer> lstUserId);


    /**
     * 批量查询用户详细信息
     * @param lstUserId
     * @return
     */
    Map<Integer, RespUserInfoBase> batchQueryUserInfoToMap(List<Integer> lstUserId);



    /**
     * 查询用户基本信息
     * @param uid
     * @return
     */
    TbUser getUser(Integer uid);



    /**
     * 根据手机号，微信号，查询用户基本信息
     * @param mobileOrWxOpenId
     * @param type
     * @return
     */
    TbUser getUser(String mobileOrWxOpenId,byte type);

    /**
     * 获取用户详细信息
     * @param uid
     * @return
     */
    RespUserInfoDetail getUserDetail(Integer uid);

    /**
     * 批量获取用户基本信息
     * @param lstUid
     * @return
     */
    List<TbUser> batchQueryTbUser(List<Integer> lstUid);

    /**
     * 批量获取用户详细信息
     * @param lstUid
     * @return
     */
    List<RespUserInfoDetail> batchQueryUserDetail(List<Integer> lstUid);

    /**
     * 计算用户年龄
     * @param year
     * @return
     */
    int getCurrentAge(int year);


    /**
     * 设置缓存
     * @param uid
     */
    void setTbUserRedis(Integer uid);


    /**
     * 用户查看好友信息
     * @param uid //登录id
     * @param friendUid // 好友id
     * @return
     */
    APIResponse<RespUserInfoBase> queryUserInfo(Integer uid ,Integer friendUid);


    /**
     * 查看好友详细信息
     * @param uid //登录id
     * @param friendUid // 好友id
     * @return
     */
    APIResponse<RespUserInfoDetail> queryUserInfoDetail(Integer uid ,Integer friendUid);

    /**
     * 用户查看好友列表信息
     * @param uid
     * @param lstUserId //好友uid
     * @return
     */
    APIResponse<List<RespUserInfoBase>> batchQueryUserInfo(Integer uid , List<Integer> lstUserId);


    /**
     * 批量查询用户详细信息
     * @param lstUserId //好友uid
     * @param uid
     * @return
     */
    APIResponse<List<RespUserInfoDetail>> batchQueryUserInfoDetail(Integer uid,List<Integer> lstUserId);

    /**
     * 备注通知缓存
     * @param uid
     * @param followId
     */
    void setFriendRemark(Integer uid ,Integer followId);


    /**
     * 批量查询用户
     * @param lstUid
     * @return
     */
    public Map<Integer,TbUser> batchQueryTbUserMap(List<Integer> lstUid);
    }
